using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Package._SceneLayers
{
    /// <summary>
    /// <para>Create Building Scene Layer Package</para>
    /// <para>Creates a scene layer package (.slpk file) from a building layer input.</para>
    /// <para>根据建筑图层输入创建场景图层包（.slpk 文件）。</para>
    /// </summary>    
    [DisplayName("Create Building Scene Layer Package")]
    public class CreateBuildingSceneLayerPackage : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateBuildingSceneLayerPackage()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_dataset">
        /// <para>Input Dataset</para>
        /// <para>The input building layer or layer file (.lyrx).</para>
        /// <para>输入构建图层或图层文件 （.lyrx）。</para>
        /// </param>
        /// <param name="_out_slpk">
        /// <para>Output Scene Layer Package</para>
        /// <para>The output scene layer package (.slpk).</para>
        /// <para>输出场景图层包 （.slpk）。</para>
        /// </param>
        public CreateBuildingSceneLayerPackage(object _in_dataset, object _out_slpk)
        {
            this._in_dataset = _in_dataset;
            this._out_slpk = _out_slpk;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Create Building Scene Layer Package";

        public override string CallName => "management.CreateBuildingSceneLayerPackage";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_dataset, _out_slpk, _out_coor_system, _transform_method, _texture_optimization.GetGPValue()];

        /// <summary>
        /// <para>Input Dataset</para>
        /// <para>The input building layer or layer file (.lyrx).</para>
        /// <para>输入构建图层或图层文件 （.lyrx）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_dataset { get; set; }


        /// <summary>
        /// <para>Output Scene Layer Package</para>
        /// <para>The output scene layer package (.slpk).</para>
        /// <para>输出场景图层包 （.slpk）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Scene Layer Package")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_slpk { get; set; }


        /// <summary>
        /// <para>Output Coordinate System</para>
        /// <para><xdoc>
        ///   <para>The coordinate system of the output scene layer package. It can be any projected or custom coordinate system. Supported geographic coordinate systems include WGS 1984 and China Geodetic Coordinate System 2000. WGS 1984 and EGM96 Geoid are the default horizontal and vertical coordinate systems, respectively. The coordinate system can be specified in any of the following ways:
        ///   <bulletList>
        ///     <bullet_item>Specify the path to a .prj file.  </bullet_item><para/>
        ///     <bullet_item>Reference a dataset with the desired coordinate system.  </bullet_item><para/>
        ///     <bullet_item>Use an arcpy.SpatialReference object.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>输出场景图层包的坐标系。它可以是任何投影坐标系或自定义坐标系。支持的地理坐标系包括 WGS 1984 和中国大地坐标系 2000。WGS 1984 和 EGM96 大地水准面分别是默认的水平坐标系和垂直坐标系。坐标系可以通过以下任一方式指定：
        ///   <bulletList>
        ///     <bullet_item>指定 .prj 文件的路径。</bullet_item><para/>
        ///     <bullet_item>使用所需坐标系引用数据集。</bullet_item><para/>
        ///     <bullet_item>使用 arcpy。SpatialReference 对象。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Coordinate System")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_coor_system { get; set; } = null;


        /// <summary>
        /// <para>Geographic Transformation</para>
        /// <para><xdoc>
        ///   <para>The datum transformation method that will be used when the input layer's coordinate system uses a datum that differs from the output coordinate system. All transformations are bidirectional, regardless of the direction implied by their names. For example, NAD_1927_to_WGS_1984_3 will work correctly even if the datum conversion is from WGS84 to NAD 1927.</para>
        ///   <para>The ArcGIS Coordinate System data is required for vertical datum transformations between ellipsoidal and gravity-related and two gravity-related datums.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>当输入图层的坐标系使用与输出坐标系不同的基准时将使用的基准变换方法。所有转换都是双向的，无论其名称所暗示的方向如何。例如，即使基准面从 WGS84 转换为 NAD 1927，NAD_1927_to_WGS_1984_3 也会正常工作。</para>
        ///   <para>椭球体与重力相关基准面以及两个重力相关基准面之间的垂直基准变换需要 ArcGIS 坐标系数据。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Geographic Transformation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _transform_method { get; set; } = null;


        /// <summary>
        /// <para>Texture Optimization</para>
        /// <para><xdoc>
        ///   <para>Specifies the textures that will be optimized according to the target platform where the scene layer package is used. Desktop includes Windows, Linux, and Mac platforms. Mobile include iOS and Android.
        ///   <para>Optimizations that include ETC2 may take significant time to process. For fastest results, use the Desktop or None option.</para>
        ///   </para>
        ///   <bulletList>
        ///     <bullet_item>All—Texture formats will be optimized for use on desktop, web, and mobile platforms. Texture formats will be JPEG, DXT, and ETC2.</bullet_item><para/>
        ///     <bullet_item>Desktop—Texture formats will be optimized for use on desktop and web platforms. Texture formats will be JPEG and DXT.</bullet_item><para/>
        ///     <bullet_item>Mobile—Texture formats will be optimized for use on desktop and mobile platforms. Texture formats will be JPEG and ETC2.</bullet_item><para/>
        ///     <bullet_item>None—Textures formats will be optimized for use on a desktop platform. The texture format will be JPEG.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定将根据使用场景图层包的目标平台进行优化的纹理。桌面包括 Windows、Linux 和 Mac 平台。移动设备包括 iOS 和 Android。
        ///   <para>包含 ETC2 的优化可能需要很长时间来处理。为了获得最快的结果，请使用“桌面”或“无”选项。</para>
        ///   </para>
        ///   <bulletList>
        ///     <bullet_item>全部 - 纹理格式将进行优化，以便在桌面、Web 和移动平台上使用。纹理格式为 JPEG、DXT 和 ETC2。</bullet_item><para/>
        ///     <bullet_item>桌面 - 纹理格式将进行优化，以便在桌面和 Web 平台上使用。纹理格式为 JPEG 和 DXT。</bullet_item><para/>
        ///     <bullet_item>移动 - 纹理格式将进行优化，以便在桌面和移动平台上使用。纹理格式为 JPEG 和 ETC2。</bullet_item><para/>
        ///     <bullet_item>无 （None） - 纹理格式将进行优化，以便在桌面平台上使用。纹理格式将为 JPEG。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Texture Optimization")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _texture_optimization_value _texture_optimization { get; set; } = _texture_optimization_value._DESKTOP;

        public enum _texture_optimization_value
        {
            /// <summary>
            /// <para>All</para>
            /// <para>All—Texture formats will be optimized for use on desktop, web, and mobile platforms. Texture formats will be JPEG, DXT, and ETC2.</para>
            /// <para>全部 - 纹理格式将进行优化，以便在桌面、Web 和移动平台上使用。纹理格式为 JPEG、DXT 和 ETC2。</para>
            /// </summary>
            [Description("All")]
            [GPEnumValue("ALL")]
            _ALL,

            /// <summary>
            /// <para>Desktop</para>
            /// <para>Desktop—Texture formats will be optimized for use on desktop and web platforms. Texture formats will be JPEG and DXT.</para>
            /// <para>桌面 - 纹理格式将进行优化，以便在桌面和 Web 平台上使用。纹理格式为 JPEG 和 DXT。</para>
            /// </summary>
            [Description("Desktop")]
            [GPEnumValue("DESKTOP")]
            _DESKTOP,

            /// <summary>
            /// <para>Mobile</para>
            /// <para>Mobile—Texture formats will be optimized for use on desktop and mobile platforms. Texture formats will be JPEG and ETC2.</para>
            /// <para>移动 - 纹理格式将进行优化，以便在桌面和移动平台上使用。纹理格式为 JPEG 和 ETC2。</para>
            /// </summary>
            [Description("Mobile")]
            [GPEnumValue("MOBILE")]
            _MOBILE,

            /// <summary>
            /// <para>None</para>
            /// <para>None—Textures formats will be optimized for use on a desktop platform. The texture format will be JPEG.</para>
            /// <para>无 （None） - 纹理格式将进行优化，以便在桌面平台上使用。纹理格式将为 JPEG。</para>
            /// </summary>
            [Description("None")]
            [GPEnumValue("NONE")]
            _NONE,

        }

        public CreateBuildingSceneLayerPackage SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}